home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 April: Mac OS SDK / Dev.CD Apr 99 SDK1.toast / Development Kits / Interfaces&Libraries / Universal / Interfaces / AIncludes / Endian.a < prev    next >
Encoding:
Text File  |  1998-08-17  |  3.6 KB  |  160 lines  |  [TEXT/MPS ]

  1. ;
  2. ;    File:        Endian.a
  3. ;
  4. ;    Contains:    QuickTime Interfaces
  5. ;
  6. ;    Version:    Technology:    QuickTime 3.0
  7. ;                Release:    Universal Interfaces 3.2
  8. ;
  9. ;    Copyright:    © 1997-1998 by Apple Computer, Inc., all rights reserved
  10. ;
  11. ;    Bugs?:        For bug reports, consult the following page on
  12. ;                the World Wide Web:
  13. ;
  14. ;                    http://developer.apple.com/bugreporter/
  15. ;
  16. ;
  17.     IF &TYPE('__ENDIAN__') = 'UNDEFINED' THEN
  18. __ENDIAN__ SET 1
  19.  
  20.     IF &TYPE('__CONDITIONALMACROS__') = 'UNDEFINED' THEN
  21.     include 'ConditionalMacros.a'
  22.     ENDIF
  23.     IF &TYPE('__MACTYPES__') = 'UNDEFINED' THEN
  24.     include 'MacTypes.a'
  25.     ENDIF
  26.  
  27.  
  28. ;   These types are used for structures that contain data that is
  29. ;   always in BigEndian format.  This extra typing prevents little
  30. ;   endian code from directly changing the data, thus saving much
  31. ;   time in the debugger.
  32.  
  33.  
  34.     IF TARGET_RT_LITTLE_ENDIAN THEN
  35. BigEndianLong            RECORD 0
  36. bigEndianValue             ds.l    1                ; offset: $0 (0)
  37. sizeof                     EQU *                    ; size:   $4 (4)
  38.                         ENDR
  39. BigEndianUnsignedLong    RECORD 0
  40. bigEndianValue             ds.l    1                ; offset: $0 (0)
  41. sizeof                     EQU *                    ; size:   $4 (4)
  42.                         ENDR
  43. BigEndianShort            RECORD 0
  44. bigEndianValue             ds.w    1                ; offset: $0 (0)
  45. sizeof                     EQU *                    ; size:   $2 (2)
  46.                         ENDR
  47. BigEndianUnsignedShort    RECORD 0
  48. bigEndianValue             ds.w    1                ; offset: $0 (0)
  49. sizeof                     EQU *                    ; size:   $2 (2)
  50.                         ENDR
  51. BigEndianFixed            RECORD 0
  52. bigEndianValue             ds.l    1                ; offset: $0 (0)
  53. sizeof                     EQU *                    ; size:   $4 (4)
  54.                         ENDR
  55. BigEndianUnsignedFixed    RECORD 0
  56. bigEndianValue             ds.l    1                ; offset: $0 (0)
  57. sizeof                     EQU *                    ; size:   $4 (4)
  58.                         ENDR
  59. BigEndianOSType            RECORD 0
  60. bigEndianValue             ds.l    1                ; offset: $0 (0)
  61. sizeof                     EQU *                    ; size:   $4 (4)
  62.                         ENDR
  63.     ELSE
  64. BigEndianLong            RECORD 0
  65. bigEndianValue             ds.l    1                ; offset: $0 (0)
  66. sizeof                     EQU *                    ; size:   $4 (4)
  67.                         ENDR
  68. BigEndianUnsignedLong    RECORD 0
  69. bigEndianValue             ds.l    1                ; offset: $0 (0)
  70. sizeof                     EQU *                    ; size:   $4 (4)
  71.                         ENDR
  72. BigEndianShort            RECORD 0
  73. bigEndianValue             ds.w    1                ; offset: $0 (0)
  74. sizeof                     EQU *                    ; size:   $2 (2)
  75.                         ENDR
  76. BigEndianUnsignedShort    RECORD 0
  77. bigEndianValue             ds.w    1                ; offset: $0 (0)
  78. sizeof                     EQU *                    ; size:   $2 (2)
  79.                         ENDR
  80. BigEndianFixed            RECORD 0
  81. bigEndianValue             ds.l    1                ; offset: $0 (0)
  82. sizeof                     EQU *                    ; size:   $4 (4)
  83.                         ENDR
  84. BigEndianUnsignedFixed    RECORD 0
  85. bigEndianValue             ds.l    1                ; offset: $0 (0)
  86. sizeof                     EQU *                    ; size:   $4 (4)
  87.                         ENDR
  88. BigEndianOSType            RECORD 0
  89. bigEndianValue             ds.l    1                ; offset: $0 (0)
  90. sizeof                     EQU *                    ; size:   $4 (4)
  91.                         ENDR
  92. ; typedef long                             BigEndianLong
  93.  
  94. ; typedef unsigned long                 BigEndianUnsignedLong
  95.  
  96. ; typedef short                         BigEndianShort
  97.  
  98. ; typedef unsigned short                 BigEndianUnsignedShort
  99.  
  100. ; typedef Fixed                         BigEndianFixed
  101.  
  102. ; typedef UnsignedFixed                 BigEndianUnsignedFixed
  103.  
  104. ; typedef OSType                         BigEndianOSType
  105.  
  106.     ENDIF    ; TARGET_RT_LITTLE_ENDIAN
  107.  
  108.  
  109.  
  110.  
  111. ;    Implement low level ≈_Swap functions.
  112. ;    
  113. ;        extern UInt16 Endian16_Swap(UInt16 value);
  114. ;        extern UInt32 Endian32_Swap(UInt32 value);
  115. ;        extern UInt64 Endian64_Swap(UInt64 value);
  116. ;        
  117. ;    Note: Depending on the processor, you might want to implement
  118. ;          these as function calls instead of macros.
  119. ;    
  120. ;
  121.  
  122.  
  123. ;
  124. ; extern UInt16 Endian16_Swap(UInt16 value)
  125. ;
  126.     IF TARGET_CPU_68K THEN
  127.         Macro
  128.         _Endian16_Swap &Dn
  129.             IF &Dn = '' THEN
  130.                 ROL.W    #8,D0
  131.             ELSE
  132.                 ROL.W    #8,&Dn
  133.             ENDIF
  134.         Endm
  135.     ENDIF
  136.  
  137. ;
  138. ; extern UInt32 Endian32_Swap(UInt32 value)
  139. ;
  140.     IF TARGET_CPU_68K THEN
  141.         Macro
  142.         _Endian32_Swap &Dn
  143.             IF &Dn = '' THEN
  144.                 ROL.W    #8,D0
  145.                 SWAP    D0
  146.                 ROL.W    #8,D0
  147.             ELSE
  148.                 ROL.W    #8,&Dn
  149.                 SWAP    &Dn
  150.                 ROL.W    #8,&Dn
  151.             ENDIF
  152.         Endm
  153.     ENDIF
  154.  
  155.  
  156.  
  157.     ENDIF ; __ENDIAN__ 
  158.  
  159.